string length
a=abcABC123ABCabc
echo ${#a}          # 15
expr length $a      # 15
special characters:
tab and new line:
augixs-ibook-g4:~ augix$ s=$'\t\n' augixs-ibook-g4:~ augix$ echo $s augixs-ibook-g4:~ augix$ s='\t\n' augixs-ibook-g4:~ augix$ echo $s \t\n
concatenate two strings:
The braces are required for concatenation constructs.
$p_01
The value of the variable "p_01".
${p}_01
The value of the variable "p" with "_01" pasted onto the end.
Substring Extraction
${string:position}
stringZ=abcABC123ABCabc
#       0123456789.....
#       0-based indexing.
echo ${stringZ:0}                            # abcABC123ABCabc
echo ${stringZ:1}                            # bcABC123ABCabc
echo ${stringZ:7}                            # 23ABCabc
echo ${stringZ:7:3}                          # 23A
                                             # Three characters of substring.
# Is it possible to index from the right end of the string?
    
echo ${stringZ:-4}                           # abcABC123ABCabc
# Defaults to full string, as in ${parameter:-default}.
# However . . .
echo ${stringZ:(-4)}                         # Cabc 
echo ${stringZ: -4}                          # Cabc
Substring Replacement
${string/substring/replacement}
    Replace first match of $substring with $replacement. [2] 
${string//substring/replacement}
    Replace all matches of $substring with $replacement.
stringZ=abcABC123ABCabc
echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                              # Replaces first match of 'abc' with 'xyz'.
echo ${stringZ//abc/xyz}      # xyzABC123ABCxyz
                              # Replaces all matches of 'abc' with # 'xyz'.
echo  ---------------
echo "$stringZ"               # abcABC123ABCabc
echo  ---------------
                              # The string itself is not altered!
# Can the match and replacement strings be parameterized?
match=abc
repl=000
echo ${stringZ/$match/$repl}  # 000ABC123ABCabc
#              ^      ^         ^^^
echo ${stringZ//$match/$repl} # 000ABC123ABC000
# Yes!          ^      ^        ^^^         ^^^
echo
# What happens if no $replacement string is supplied?
echo ${stringZ/abc}           # ABC123ABCabc
echo ${stringZ//abc}          # ABC123ABC
# A simple deletion takes place.
change file name
# method 1
i=a.JPG
mv $i ${i/.JPG/}.jpg
# method 2, check rename by "man rename"
rename 's/\.JPG/\.jpg/' a.JPG
Hide Comments